C     COMPUTER PROGRAM TO RENUMBER OLD FORTRAN STATEMENT NUMBERS
C     TO NEW SQUENTIAL NUMBERS
C     BY MARIO MARQUES , BUREAU OF PUBLIC ROADS
C     DEVELOPED  ON   IBM/360/50   SEPTEMBER 1968
C
      COMMON COL(400),KOL(400),KOLL(80),INDEX,ICOUNT,TAB2,JJ
      DIMENSION TAB1(1000),         COLL(80),          IX1(20),NUM(10)
      INTEGER BLANK,SYSIN,SYSOT,COL,COLL,TAB1,TAB2,EYE,EF,RPREN,GEE,OH,
     1 COM,AST,TAB,BLANK4,DEE,ARE,HE,HEY,PEA,WYOU,YOU,HEN,SEE,EQU,ES,TEE
     2 ,SYSPN,DOLLAR,SLASH
      DATA SYSIN/5/,SYSOT/6/,BLANK/1H /,   EYE/1HI/,EF/1HF/,RPREN/1H)/,
     1GEE/1HG/,OH/1HO/,COM/1H,/,LPREN/1H(/,AST/1H*/,TEE/1HT/,SYSPN/7 /,
     2 BLANK4/4H    /,DEE/1HD/                  ,LEL/1HL/,EQU/1H=/,ARE
     3/1HR/,HE/1HE/,HEY/1HA/,PEA/1HP/,WYOU/1HW/,YOU/1HU/,HEN/1HN/,SEE
     4/1HC/,NUM/1H0,1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9/,ES/1HS/
     5,DOLLAR/1H$/,SLASH/1H//
C
C     READ SOURCE DECK CARD ( 80 COLUMNS)
C
      IDFL08 = 8
      REWIND IDFL08
    5 READ (SYSIN,1025)NAME,IBASE,INC
      WRITE(SYSOT,1055)
      I=1
      K24=2**24
      K28=2**28
      LIMIT = 0
   10 READ(SYSIN,1015)(COL(J), J=1,80)
      DO 15  II=73,80
   15 COL(II)=BLANK
      IF(COL(1).EQ.SEE.OR.COL(1).EQ.AST   .OR.COL(1).EQ.SLASH)GO TO 45
C
C     ROUTINE TO RIGHT JUSTIFY STATEMENT NUMBERS  IN COL 2 - 5
C
      II=5
   20 IF(COL(II).NE.BLANK)GO TO 25
      II=II-1
      IF(II.EQ.0)GO TO 45
      GO TO 20
   25 GO TO(27,40,35,30,45),II
   27 COL(5)=COL(1)
      COL(4)=BLANK
      COL(3)=BLANK
      COL(2)=BLANK
      COL(1)=BLANK
      GO TO 45
   30 COL(5)=COL(4)
      COL(4)=COL(3)
      COL(3)=COL(2)
      COL(2)=COL(1)
      COL(1)=BLANK
      GO TO 45
   35 COL(5)=COL(3)
      COL(4)=COL(2)
      COL(3)=COL(1)
      COL(2)=BLANK
      COL(1)=BLANK
      GO TO 45
   40 COL(5)=COL(2)
      COL(4)=COL(1)
      COL(3)=    BLANK
      COL(2)=    BLANK
      COL(1)=BLANK
   45 WRITE (IDFL08,46) (COL(J), J=1,80)
   46 FORMAT(80A1)
   50 IF(COL(1).EQ.AST)GO TO 85
      IF(COL(1).EQ.SEE.OR.COL(1).EQ.DOLLAR.OR.COL(1).EQ.SLASH)GO TO 10
      K1=(COL(1)+K28)/K24
      K2=(COL(2)+K28)/K24
      K3=(COL(3)+K28)/K24
      K4=(COL(4)+K28)/K24
      K5=(COL(5)+K28)/K24
   55 IF(COL(1).NE.BLANK) GO TO 57
      IF(COL(2).NE.BLANK   )GO TO 60
      IF(COL(3).NE.BLANK   )GO TO 65
      IF(COL(4).NE.BLANK   )GO TO 70
      IF(COL(5).NE.BLANK   )GO TO 75
      GO TO 10
C
C     CREATE TABLE OF ORIGINAL STATEMENT NUMBERS
C
   57 TAB1(I)=K1*10000+K2*1000+K3*100+K4*10+K5
      GO TO 80
   60 TAB1(I)=K2*1000+K3*100+K4*10+K5
      GO TO 80
   65 TAB1(I)=K3*100+K4*10+K5
      GO TO 80
   70 TAB1(I)= K4*10+K5
      GO TO 80
   75 TAB1(I)= K5
   80 I=I+1
      LIMIT = LIMIT + 1
      IF(I.EQ.1001)GO TO 995
      GO TO 10
   85 ENDFILE IDFL08
      REWIND IDFL08
      IDENT = 0
   90 READ (IDFL08,46)(COL(J), J=1,80)
   95 IDENT=IDENT+5
      K1=(COL(1)+K28)/K24
      K2=(COL(2)+K28)/K24
      K3=(COL(3)+K28)/K24
      K4=(COL(4)+K28)/K24
      K5=(COL(5)+K28)/K24
      ISTORE = 0
      ISTEP = 0
      ICOUNT = 0
      IF (COL(1).EQ.AST)GO TO 990
      IF(COL(1).EQ.SEE.OR.COL(1).EQ.DOLLAR.OR.COL(1).EQ.SLASH)GO TO 160
      IF(COL(1).NE.BLANK)GO TO 97
      IF(COL(2).NE.BLANK   )GO TO 100
      IF(COL(3).NE.BLANK   )GO TO 105
      IF(COL(4).NE.BLANK   )GO TO 110
      IF(COL(5).NE.BLANK   )GO TO 115
      TAB = BLANK4
      GO TO 135
   97 I2=K1*10000+K2*1000+K3*100+K4*10+K5
      GO TO 120
  100 I2=  K2*1000+K3*100+K4*10+K5
      GO TO 120
  105 I2= K3*100+K4*10+K5
      GO TO 120
  110 I2= K4*10+K5
      GO TO 120
  115 I2= K5
  120 DO 125   N=1,LIMIT
      IF(TAB1(N).EQ.I2)GO TO 130
  125 CONTINUE
      GO TO 985
C
C       TAB2 REPRESENTS NEW STATEMENT NUMBER
C
  130 TAB2 = IBASE + N*INC
      TAB = TAB2
  135 IF(COL(6).EQ.BLANK)GO TO 140
      IF(COL(6).EQ.NUM(1))GO TO 140
      GO TO 145
C
C       TEST FOR  IF, GO, DO, READ, PRINT, WRITE, PUNCH, AND ASSIGN
C                          STATEMENTS
C
  140 IF(COL(7).EQ.EYE.AND.COL(8).EQ.EF)GOTO 215
      IF(COL(7).EQ.GEE.AND.COL(8).EQ.OH)GO TO 435
      IF(COL(7).EQ.DEE.AND.COL(8).EQ.OH)GO TO 645
      IF(COL(7).EQ.ARE.AND.COL(8).EQ.HE.AND.COL(9).EQ.HEY)GO TO 825
      IF(COL(7).EQ.PEA.AND.COL(8).EQ.ARE.AND.COL(9).EQ.EYE)GO TO 825
      IF(COL(7).EQ.WYOU.AND.COL(8).EQ.ARE.AND.COL(9).EQ.EYE)GO TO 825
      IF(COL(7).EQ.PEA.AND.COL(8).EQ.YOU.AND.COL(9).EQ.HEN)GO TO 825
      IF(COL(7).EQ.HEY.AND.COL(8).EQ.ES.AND.COL(9).EQ.ES)GO TO 815
  145 IF(TAB.EQ.BLANK4)GO TO 155
  150 WRITE(SYSOT,1005)COL(1),TAB,(COL(K), K=6,72),NAME,IDENT
      WRITE(SYSPN,1040)COL(1),TAB,(COL(K), K=6,72),NAME,IDENT
      IF(ISTORE.EQ.1)GO TO 205
      IF(ISTORE.EQ.2)GO TO 175
      GO TO 90
  155 WRITE(SYSOT,1030)COL(1),TAB,(COL(K), K=6,72),NAME,IDENT
      WRITE(SYSPN,1045)COL(1),TAB,(COL(K), K=6,72),NAME,IDENT
      IF(ISTORE.EQ.1)GO TO 205
      IF(ISTORE.EQ.2)GO TO 175
      GO TO 90
  160 WRITE(SYSOT,1035)(COL(K), K=1,72),NAME,IDENT
      WRITE(SYSPN,1050)(COL(K), K=1,72),NAME,IDENT
      GO TO 90
C
C       ROUTINE TO PREPARE ALL STATEMENTS (EXCEPT COMMENT CARDS)
C
C     TO BE  PRINTED AND PUNCHED
C
  165 IF(INDEX.GT.72)GO TO 170
      ISTORE = 1
      GO TO 145
  170 ISTORE = 2
      JJ=73
      GO TO 145
  175 DO 180  I=1,72
  180 COL(I) = BLANK
  185 K=10
  190 COL(K) = COL(JJ)
      IF(JJ.EQ.INDEX)GO TO 195
      IF(K.EQ.72)GO TO 200
      K=K+1
      JJ=JJ+1
      GO TO 190
  195 IDENT = IDENT+5
      TAB = BLANK4
      COL(6)=NUM(2)
      ISTORE = 1
      JJ=JJ+1
      GO TO 145
  200 IDENT = IDENT+5
      TAB = BLANK4
      COL(6) = NUM(2)
      JJ=JJ+1
      GO TO 145
  205 DO 210  I=1,80
      COL(I) = KOLL(I)
  210 CONTINUE
      GO TO 95
C
C       TEST FOR  (EQUAL SIGN) , (CALL) AND (RETURN IN AN IF STATEMENT
C
C       TEST FOR IF (     ) 00,00,00  STATEMENT
C
  215 CALL SUB85
      DO 220  I=7,INDEX
      IF(COL(I).EQ.EQU)GO TO 165
  220 CONTINUE
  225 I=INDEX
  230 IF(COL(I).EQ.COM)GO TO 315
      IF(COL(I).EQ.RPREN)GO TO 235
C
C     CHECK FOR CALL , RETURN , STOP , PAUSE , REWIND
C     FOLLOWING AN  IF(      )  STATEMENT
C
      IF(COL(I).EQ.LEL.AND.COL(I-1).EQ.LEL.AND.COL(I-2).EQ.HEY.AND.COL(I
     1   -3).EQ.SEE)GO TO 165
      IF(COL(I).EQ.HEN.AND.COL(I-1).EQ.ARE.AND.COL(I-2).EQ.YOU.AND.COL(I
     1   -3).EQ.TEE)GO TO 165
      IF(COL(I).EQ.PEA.AND.COL(I-1).EQ.OH.AND.COL(I-2).EQ.TEE.AND.COL(I-
     1   3).EQ.ES)GO TO 165
      IF(COL(I).EQ.DEE.AND.COL(I-1).EQ.HEN.AND.COL(I-2).EQ.EYE.AND.COL(I
     1   -3).EQ.WYOU)GO TO 165
      IF(COL(I).EQ.HE.AND.COL(I-1).EQ.ES.AND.COL(I-2).EQ.YOU.AND.COL(I-3
     1   ).EQ.HEY)GO TO 165
      I=I-1
      IF(I.EQ.7)GO TO 980
      GO TO 230
C
C
C       TEST FOR IF(  ) GO TO I,(00,00) CONDITION
C
C
C     ROUTINE FOR  IF(  )  GO TO 000
C
C
C     ROUTINE FOR GO TO 000 CONDITION
C
C
  235 I=INDEX
  240 IF(COL(I).EQ.COM)GO TO 455
      IF(COL(I).EQ.OH.AND.COL(I-1).EQ.GEE)GO TO 245
      IF(I.EQ.7)GO TO 245
      I=I-1
      GO TO 240
  245 I=INDEX
  250 IF(COL(I).NE.BLANK   )GO TO 255
      I=I-1
      GO TO 250
  255 IF(COL(I-1).EQ.BLANK   .OR.COL(I-1).EQ.OH)GO TO 260
      IF(COL(I-2).EQ.BLANK   .OR.COL(I-2).EQ.OH)GO TO 265
      IF(COL(I-3).EQ.BLANK   .OR.COL(I-3).EQ.OH)GO TO 270
      IF(COL(I-4).EQ.BLANK   .OR.COL(I-4).EQ.OH)GO TO 275
      GO TO 985
  260 JJ = I
      I2= (COL(I)+K28)/K24
      GO TO 280
  265 JJ = I-1
      I2= (COL(I-1)+K28)/K24*10+(COL(I)+K28)/K24
      GO TO 280
  270 JJ = I-2
      I2=(COL(I-2)+K28)/K24*100+(COL(I-1)+K28)/K24*10+(COL(I)+K28)/K24
      GO TO 280
  275 JJ = I-3
      I2= (COL(I-3)+K28)/K24*1000+(COL(I-2)+K28)/K24*100+(COL(I-1)+K28)/
     1K24*10+(COL(I)+K28)/K24
  280 DO 285  N=1,LIMIT
      IF(TAB1(N).EQ.I2)GO TO 290
  285 CONTINUE
      GO TO 985
  290 TAB2= IBASE + N*INC
      IF(TAB2   .LT.10)GO TO 295
      IF(TAB2   .LT.100.AND.TAB2   .GT.9)GO TO 300
      IF(TAB2   .LT.1000.AND.TAB2   .GT.99)GO TO 305
      IF(TAB2   .LT.10000.AND.TAB2   .GT.999)GO TO 310
  295 CALL LOC(4)
      COL(JJ+1) = BLANK
      COL(JJ+2) = BLANK
      COL(JJ+3) = BLANK
      INDEX=JJ+3
      GO TO 165
  300 CALL LOC(3)
      COL(JJ+2) = BLANK
      COL(JJ+3) = BLANK
      INDEX=JJ+3
      GO TO 165
  305 CALL LOC(2)
      COL(JJ+3) = BLANK
      INDEX=JJ+3
      GO TO 165
  310 CALL LOC(1)
      INDEX=JJ+3
      GO TO 165
C
C
C       TEST FOR  IF(     ) GO TO (00,00,),II CONDITION
C
C
C       ROUTINE  FOR  IF (   ) 000,000,000
C
  315 I=INDEX
  320 IF(COL(I).EQ.LPREN)GO TO 325
      IF(I.EQ.8)GO TO 330
      I=I-1
      GO TO 320
  325 IF(COL(I).EQ.OH.AND.COL(I-1).EQ.GEE)GO TO 455
      IF(I.EQ.8)GO TO 330
      I=I-1
      GO TO 325
  330 J=3
      I=INDEX
  335 IF(COL(I).EQ.BLANK.OR.COL(I).EQ.COM)GO TO 340
      IF(COL(I-1).EQ.COM.OR.COL(I-1).EQ.RPREN.OR.COL(I-1).EQ.BLANK)GO TO
     1   345
      IF(COL(I-2).EQ.COM.OR.COL(I-2).EQ.RPREN.OR.COL(I-2).EQ.BLANK)GO TO
     1   350
      IF(COL(I-3).EQ.COM.OR.COL(I-3).EQ.RPREN.OR.COL(I-3).EQ.BLANK)GO TO
     1   355
      IF(COL(I-4).EQ.COM.OR.COL(I-4).EQ.RPREN.OR.COL(I-4).EQ.BLANK)GO TO
     1   360
  340 I=I-1
      GO TO 335
  345 JJ = I
      COLL(J)= (COL(I)+K28)/K24
      GO TO 365
  350 JJ = I-1
      COLL(J)= (COL(I-1)+K28)/K24*10+(COL(I)+K28)/K24
      GO TO 370
  355 JJ = I-2
      COLL(J)= (COL(I-2)+K28)/K24*100+(COL(I-1)+K28)/K24*10+(COL(I)+K28)
     1/K24
      GO TO 375
  360 JJ = I-3
      COLL(J)= (COL(I-3)+K28)/K24*1000+(COL(I-2)+K28)/K24*100+(COL(I-1)
     1+K28)/K24*10+(COL(I)+K28)/K24
      GO TO 380
  365 J=J-1
      I=I-2
      IF(J.EQ.0) GO TO 385
      GO TO 335
  370 J=J-1
      I=I-3
      IF(J.EQ.0)GO TO 385
      GO TO 335
  375 J=J-1
      I=I-4
      IF(J.EQ.0)GO TO 385
      GO TO 335
  380 J=J-1
      I=I-5
      IF(J.EQ.0)GO TO 385
      GO TO 335
  385 J=1
  390 DO 395 N=1,LIMIT
      IF(TAB1(N).EQ.COLL(J))GO TO 400
  395 CONTINUE
      GO TO 985
  400 TAB2 = IBASE + N*INC
      IF(TAB2   .LT.10)GO TO 405
      IF(TAB2   .LT.100.AND.TAB2   .GT.9)GO TO 410
      IF(TAB2   .LT.1000.AND.TAB2   .GT.99)GO TO 415
      IF(TAB2   .LT.10000.AND.TAB2   .GT.999)GO TO 420
  405 CALL LOC(4)
      COL(JJ+1) = BLANK
      I=JJ+1
      IF(J.EQ.3)GO TO 425
      COL(JJ+1)=COM
      JJ = JJ+2
      J=J+1
      GO TO 390
  410 CALL LOC(3)
      COL(JJ+2)=BLANK
      I=JJ+2
      IF(J.EQ.3)GO TO 425
      COL(JJ+2)=COM
      JJ = JJ+3
      J=J+1
      GO TO 390
  415 CALL LOC(2)
      COL(JJ+3)=BLANK
      I=JJ+3
      IF(J.EQ.3)GO TO 425
      COL(JJ+3)=COM
      JJ = JJ+4
      J=J+1
      GO TO 390
  420 CALL LOC(1)
      COL(JJ+4)=BLANK
      I=JJ+4
      IF(J.EQ.3)GO TO 425
      COL(JJ+4)=COM
      JJ = JJ+5
      J=J+1
      GO TO 390
  425 INDEX=I
      DO 430  I=INDEX,400
  430 COL(I)=BLANK
      INDEX = INDEX-1
      GO TO 165
C
C
C       TEST FOR GO TO 0000   CONDITION
C
C
  435 CALL SUB85
      DO 440  I=7,INDEX
      IF(COL(I).EQ.EQU)GO TO 165
  440 CONTINUE
  445 J=1
      DO 450  I=7,20
      IF(COL(I).EQ.LPREN)GO TO 455
  450 CONTINUE
      GO TO 235
C
C
C       ROUTINE FOR  GO TO ( 000,000,000  ),III
C
C       ROUTINE  FOR IF(     ) GO TO II,(00,00)
C
C        ROUTINE  FOR  IF(     )  GO TO (00,00),II
C
C
  455 I=INDEX
  460 IF(COL(I).EQ.RPREN)GO TO 465
      I=I-1
      GO TO 460
  465 M=1
  470 IX1(M)=COL(I)
      IF(I.EQ.INDEX)GO TO 475
      I=I+1
      M=M+1
      GO TO 470
  475 L=0
      LL=0
      J=1
  480 IF(COL(I).EQ.LPREN)GO TO 485
      I=I-1
      GO TO 480
  485 IF(COL(I).EQ.COM)GO TO 495
      IF(COL(I).EQ.RPREN)GO TO 532
      I=I+1
      GO TO 485
  495 IF(COL(I-1).NE.BLANK   )GO TO 500
      I=I-1
      GO TO 495
  500 IF(COL(I-2).EQ.COM.OR.COL(I-2).EQ.BLANK.OR.COL(I-2).EQ.LPREN)GO TO
     1   505
      IF(COL(I-3).EQ.COM.OR.COL(I-3).EQ.BLANK.OR.COL(I-3).EQ.LPREN)GO TO
     1   510
      IF(COL(I-4).EQ.COM.OR.COL(I-4).EQ.BLANK.OR.COL(I-4).EQ.LPREN)GO TO
     1  515
      IF(COL(I-5).EQ.COM.OR.COL(I-5).EQ.BLANK   .OR.COL(I-5).EQ.LPREN)GO
     1    TO 520
      GO TO 985
  505 COLL(J)= (COL(I-1)+K28)/K24
      LL=LL+1
      GO TO 525
  510 COLL(J)= (COL(I-2)+K28)/K24*10+(COL(I-1)+K28)/K24
      LL=LL+1
      GO TO 525
  515 COLL(J)= (COL(I-3)+K28)/K24*100+(COL(I-2)+K28)/K24*10+(COL(I-1)+
     1K28)/K24
      LL=LL+1
      GO TO 525
  520 COLL(J)= (COL(I-4)+K28)/K24*1000+(COL(I-3)+K28)/K24*100+(COL(I-2)+
     1K28)/K24*10+(COL(I-1)+K28)/K24
      LL=LL+1
  525 IF(COL(I).EQ.COM)GO TO 530
      IF(L.EQ.1)GO TO 545
  530 I=I+1
      J=J+1
      GO TO 485
  532 L=1
      GO TO 495
  545 I=INDEX
  550 IF(COL(I).EQ.LPREN)GO TO 555
      I=I-1
      GO TO 550
  555 JJ=I+1
      J=1
  560 DO 565 N=1,LIMIT
      IF(TAB1(N).EQ.COLL(J))GO TO 570
  565 CONTINUE
      GO TO 985
  570 TAB2 = IBASE + N*INC
      IF(TAB2   .LT.10)GO TO 575
      IF(TAB2   .LT.100.AND.TAB2   .GT.9)GO TO 580
      IF(TAB2   .LT.1000.AND.TAB2   .GT.99)GO TO 585
      IF(TAB2   .LT.10000.AND.TAB2   .GT.999)GO TO  590
  575 CALL LOC(4)
      COL(JJ+1) = COM
      IF(J.EQ.LL)GO TO 595
      JJ = JJ+2
      J = J+1
      GO TO 560
  580 CALL LOC(3)
      COL(JJ+2) = COM
      IF(J.EQ.LL)GO TO 605
      JJ = JJ+3
      J=J+1
      GO TO 560
  585 CALL LOC(2)
      COL(JJ+3) = COM
      IF(J.EQ.LL)GO TO 615
      JJ = JJ+4
      J = J+1
      GO TO 560
  590 CALL LOC(1)
      COL(JJ+4) = COM
      IF(J.EQ.LL)GO TO 625
      JJ = JJ+5
      J = J+1
      GO TO 560
  595 K=1
      DO 600  KK=1,M
      J1 = JJ+K
      COL(J1  ) = IX1(KK)
  600 K=K+1
      IF(INDEX.GT.J1)GO TO 635
      INDEX=J1
      GO TO 165
  605 K=2
      DO  610  KK=1,M
      J1=JJ+K
      COL(J1  ) = IX1(KK)
  610 K=K+1
      IF(INDEX.GT.J1)GO TO 635
      INDEX=J1
      GO TO 165
  615 K=3
      DO 620  KK=1,M
      J1=JJ+K
      COL(J1  ) = IX1(KK)
  620 K=K+1
      IF(INDEX.GT.J1)GO TO 635
      INDEX=J1
      GO TO 165
  625 K=4
      DO 630  KK=1,M
      J1=JJ+K
      COL(J1  ) = IX1(KK)
  630 K=K+1
      IF(INDEX.GT.J1)GO TO 635
      INDEX=J1
      GO TO 165
  635 J1=J1+1
      DO 640  I=J1,INDEX
  640 COL(I) = BLANK
      INDEX = J1-1
      GO TO 165
C
C
C      ROUTINE FOR DO  STATEMENT
C
C
  645 CALL SUB85
      DO 650  I=7,INDEX
      IF(COL(I).EQ.LPREN)GO TO 165
  650 CONTINUE
      DO 655 I=7,INDEX
      IF(COL(I).EQ.COM)GO TO 660
  655 CONTINUE
      GO TO 165
  660 DO 665  I=7,INDEX
      IF(COL(I).EQ.EQU)GO TO 670
  665 CONTINUE
      GO TO 165
  670 DO 675  I=7,INDEX
      DO 675  K=1,10
      IF(COL(I).EQ.NUM(K))GO TO 680
  675 CONTINUE
      GO TO 985
  680 I=I+1
      DO 685  K=1,10
      IF(COL(I).EQ.NUM(K))GO TO 680
  685 CONTINUE
  690 I=I-1
  695 DO 700  K=1,10
      IF(COL(I).EQ.NUM(K))GO TO 705
  700 CONTINUE
      IF(I.EQ.7)GO TO 985
      GO TO 690
  705 K=1
      J=I+1
  710 KOL(K)=COL(J)
      IF(J.GE.INDEX)GO TO 715
      K=K+1
      J=J+1
      GO TO 710
  715 KK=1
  720 DO 725  K=1,10
      IF(COL(I-1).EQ.NUM(K))GO TO 730
  725 CONTINUE
      GO TO 735
  730 I=I-1
      KK=KK+1
      GO TO 720
  735 IF(KK.EQ.1)GO TO 740
      IF(KK.EQ.2)GO TO 745
      IF(KK.EQ.3)GO TO 750
      IF(KK.EQ.4)GO TO 755
  740 I2= (COL(I)+K28)/K24
      GO TO 760
  745 I2= (COL(I)+K28)/K24*10+(COL(I+1)+K28)/K24
      GO TO 760
  750 I2= (COL(I)+K28)/K24*100+(COL(I+1)+K28)/K24*10+(COL(I+2)+K28)/K24
      GO TO 760
  755 I2=(COL(I)+K28)/K24*1000+(COL(I+1)+K28)/K24*100+(COL(I+2)+K28)/K24
     1*10+(COL(I+3)+K28)/K24
  760 DO 765  N = 1,LIMIT
      IF(TAB1(N).EQ.I2)GO TO 770
  765 CONTINUE
      GO TO 985
  770 JJ=I
      TAB2 = IBASE + N*INC
      IF(TAB2   .LT.10)GO TO 775
      IF(TAB2   .LT.100.AND.TAB2   .GT.9)GO TO 780
      IF(TAB2   .LT.1000.AND.TAB2   .GT.99)GO TO 785
      IF(TAB2   .LT.10000.AND.TAB2   .GT.999)GO TO 790
      GO TO 985
  775 CALL LOC(4)
      JJ=JJ+1
      GO TO 795
  780 CALL LOC(3)
      JJ=JJ+2
      GO TO 795
  785 CALL LOC(2)
      JJ=JJ+3
      GO TO 795
  790 CALL LOC(1)
      JJ=JJ+4
  795 I=JJ
      COL(I) = BLANK
      IF(ISTEP.EQ.0)GO TO 800
      I=I-1
  800 K=1
  805 COL(I+1) = KOL(K)
      I=I+1
      K=K+1
      IF(I.EQ.400)GO TO 810
      GO TO 805
  810 INDEX = I
      IF(COL(I).NE.BLANK)GO TO 165
      I=I-1
      GO TO 810
C
C
C       ROUTINE  FOR  ASSIGN  STATEMENT
C
C
  815 CALL SUB85
      DO 820  I=7,INDEX
      IF(COL(I).EQ.EQU)GO TO 165
  820 CONTINUE
      GO TO 670
C
C       READ  ,  WRITE,  PUNCH,  AND PRINT  ROUTINE
C
  825 CALL SUB85
      ISTEP=1
      DO 830  I=7,INDEX
      IF(COL(I).EQ.EQU)GO TO 835
  830 CONTINUE
      GO TO 845
  835 DO 840  I=7,INDEX
      IF(COL(I).EQ.COM)GO TO 845
  840 CONTINUE
      GO TO 165
  845 DO 850  I=7,25
      IF(COL(I).EQ.TEE.AND.COL(I+1).EQ.HEY.AND.COL(I+2).EQ.PEA.AND.COL(I
     1   +3).EQ.HE)GO TO 855
  850 CONTINUE
      GO TO 890
  855 DO 860  I=7,30
      IF(COL(I).EQ.COM)GO TO 865
  860 CONTINUE
  865 I=I+1
  870 IF(COL(I).NE.BLANK)GO TO 875
      GO TO 865
  875 DO 880  K=1,10
      IF(COL(I).EQ.NUM(K))GO TO 885
  880 CONTINUE
      GO TO 165
  885 I=I+1
      IF(COL(I).EQ.COM.OR.COL(I).EQ.BLANK)GO TO 690
      GO TO 885
  890 DO 895  I=7,20
      IF(COL(I).EQ.LPREN)GO TO 910
  895 CONTINUE
  900 DO 905  I=7,20
      IF(COL(I).EQ.COM)GO TO 690
  905 CONTINUE
      GO TO 690
  910 IF(COL(I-1).EQ.COM)GO TO 915
      IF(I.EQ.7)GO TO 940
      I=I-1
      GO TO 910
  915 I=7
  920 I=I+1
      DO 925  K=1,10
      IF(COL(I).EQ.NUM(K))GO TO 930
  925 CONTINUE
      GO TO 920
  930 I=I+1
      DO 935  K=1,10
      IF(COL(I).EQ.NUM(K))GO TO 930
  935 CONTINUE
      GO TO 690
  940 IF(COL(I).EQ.RPREN)GO TO 945
      I=I+1
      GO TO 940
  945 J=I
  950 IF(COL(I).EQ.COM)GO TO 955
      IF(COL(I).EQ.LPREN)GO TO 165
      I=I-1
      GO TO 950
  955 I=I+1
  960 IF(COL(I).NE.BLANK   )GO TO 965
      GO TO 955
  965 DO 970  K=1,10
      IF(COL(I).EQ.NUM(K))GO TO 975
  970 CONTINUE
      GO TO 165
  975 I=J
      GO TO 690
  980 WRITE(SYSOT,1065)
  985 WRITE(SYSOT,1020)(COL(J), J=1,80)
      IF(ICOUNT.EQ.0)GO TO 90
      GO TO 205
  990 IF(COL(72).EQ.AST)GO TO 1000
      REWIND IDFL08
      GO TO 5
  995 WRITE(SYSOT,1060)
 1000 WRITE(SYSOT,1010)
      REWIND IDFL08
 1005 FORMAT(4X,A1,I4,67A1,A3,I5)
 1010 FORMAT(13H1  END OF RUN)
 1015 FORMAT(80A1)
 1020 FORMAT( 60H THE PROGRAM COULD NOT PROCESS THE FOLLOWING STATEMENT
     1     //10X,80A1//)
 1025 FORMAT( A3,I4,I2)
 1030 FORMAT(4X,A1,A4,67A1,A3,I5)
 1035 FORMAT(4X,72A1,A3,I5)
 1040 FORMAT(A1,I4,67A1,A3,I5)
 1045 FORMAT(A1,A4,67A1,A3,I5)
 1050 FORMAT(72A1,A3,I5)
 1055 FORMAT(1H1)
 1060 FORMAT(18H  TAB1 IS EXCEEDED)
 1065 FORMAT(29H  I EXCEEDS MAX OR MIN LIMITS)
      STOP
      END
       SUBROUTINE  SUB85
      COMMON COL(400),KOL(400),KOLL(80),INDEX,ICOUNT,TAB2,JJ
      DIMENSION         NUM(10)
      INTEGER BLANK, COL,TAB2,SEE
      DATA BLANK/   1H /,NUM/1H0,1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9/
     1 ,SEE/1HC/
      IDFLO8=8
    5 DO 10  I=73,400
      COL(I)=BLANK
   10 CONTINUE
      DO 15  I=1,400
      KOL(I) = BLANK
   15 CONTINUE
      ICOUNT=1
      II=72
   20 IF(COL(II).NE.BLANK   )GO TO 25
      II=II-1
      GO TO 20
   25 READ(IDFLO8,46)KOLL
   46 FORMAT(80A1)
      IF(KOLL(1).EQ.SEE)GO TO 40
      IF(KOLL(6).EQ.NUM(1).OR.KOLL(6).EQ.BLANK   )GO TO 40
      ICOUNT = ICOUNT+1
      J=7
      II=II+1
   30 IF(KOLL(J).NE.BLANK   )GO TO 35
      J=J+1
      GO TO 30
   35 COL(II) = KOLL(J)
      IF(J.EQ.72)GO TO 20
      J=J+1
      II=II+1
      GO TO 35
   40 INDEX = II
      RETURN
      END
         SUBROUTINE  LOC(MM)
      COMMON COL(400),KOL(400),KOLL(80),INDEX,ICOUNT,TAB2,JJ
      INTEGER COL,TAB2
      K24= 2**24
      K28=2**28
      GO TO (5,10,15,20),MM
    5 COL(JJ) = (TAB2   /1000)*K24-K28
      COL(JJ+1) = (TAB2    /100 - TAB2    /1000*10)*K24-K28
      COL(JJ+2) = (TAB2   /10 - TAB2    /100*10)*K24-K28
      COL(JJ+3) = IABS(TAB2    - TAB2    /10*10)*K24-K28
      RETURN
   10 COL(JJ  ) = (TAB2    /100 - TAB2    /1000*10)*K24-K28
      COL(JJ+1) = (TAB2    /10 - TAB2    /100*10)*K24-K28
      COL(JJ+2) = IABS(TAB2    - TAB2    /10*10)*K24-K28
      RETURN
   15 COL(JJ  ) = (TAB2   /10 - TAB2   /100*10)*K24-K28
      COL(JJ+1) = IABS(TAB2    -TAB2    /10*10)*K24-K28
      RETURN
   20 COL(JJ  ) = IABS(TAB2    - TAB2    /10*10)*K24-K28
      RETURN
      END
    